/**
 * 页面权限守卫
 * @author Wu.Liang
 */
import PermissionManager from './permission.js'

/**
 * 设置页面权限守卫
 */
export function setupPageGuard() {
  // 页面跳转前检查权限
  uni.addInterceptor('navigateTo', {
    invoke(e) {
      return checkPagePermission(e.url)
    }
  })

  uni.addInterceptor('redirectTo', {
    invoke(e) {
      return checkPagePermission(e.url)
    }
  })

  uni.addInterceptor('reLaunch', {
    invoke(e) {
      return checkPagePermission(e.url)
    }
  })

  uni.addInterceptor('switchTab', {
    invoke(e) {
      return checkPagePermission(e.url)
    }
  })
}

/**
 * 检查页面权限
 * @param {string} url 页面URL
 * @returns {boolean|object} 是否允许访问
 */
function checkPagePermission(url) {
  const permissionManager = PermissionManager.getInstance()
  
  // 白名单页面直接放行
  const whiteList = [
    '/pages/login/index',
    '/pages/login/register',
    '/pages/login/forgot-password',
    '/pages/common/privacy-policy',
    '/pages/common/user-agreement',
    '/pages/404/index',
    '/pages/403/index'
  ]
  
  if (whiteList.includes(url)) {
    return true
  }

  // 检查用户是否已登录
  const token = uni.getStorageSync('token')
  if (!token) {
    uni.navigateTo({
      url: '/pages/login/index'
    })
    return false
  }

  // 检查页面权限 - 修改：权限不足时只显示提示，不阻止访问
  if (!permissionManager.hasMenuPermission(url)) {
    uni.showToast({
      title: '暂无访问权限',
      icon: 'error',
      duration: 2000
    })
    // 移除return false，允许继续访问页面
  }

  return true
}

/**
 * 检查当前页面权限
 * @param {string} pagePath 页面路径
 * @returns {boolean} 是否有权限
 */
export function checkCurrentPagePermission(pagePath) {
  const permissionManager = PermissionManager.getInstance()
  return permissionManager.hasMenuPermission(pagePath)
}

/**
 * 权限提示
 * @param {string} message 提示信息
 */
export function showPermissionTip(message = '暂无访问权限') {
  uni.showToast({
    title: message,
    icon: 'error',
    duration: 2000
  })
}

/**
 * 跳转到无权限页面
 */
export function goToNoPermissionPage() {
  uni.navigateTo({
    url: '/pages/403/index'
  })
}

/**
 * 跳转到登录页面
 */
export function goToLoginPage() {
  uni.navigateTo({
    url: '/pages/login/index'
  })
} 